home *** CD-ROM | disk | FTP | other *** search
/ Software Vault: The Gold Collection / Software Vault - The Gold Collection (American Databankers) (1993).ISO / cdr47 / wasm223.zip / BUFFER3.ASM < prev    next >
Assembly Source File  |  1993-05-05  |  2KB  |  81 lines

  1. ;********************************;
  2. ; WASM Buffered File I/O, Output ;
  3. ; By Eric Tauck                  ;
  4. ;                                ;
  5. ; Defines:                       ;
  6. ;                                ;
  7. ;   PutByt  write a byte         ;
  8. ;   BufPut  write a buffer       ;
  9. ;                                ;
  10. ; Requires:                      ;
  11. ;                                ;
  12. ;   BUFFER1.ASM                  ;
  13. ;   FILE.ASM                     ;
  14. ;********************************;
  15.  
  16.         jmps    _buffer3_end
  17.  
  18. ;========================================
  19. ; Write a byte to a buffer.
  20. ;
  21. ; In: AL= byte; BX= buffer record
  22. ;     address.
  23. ;
  24. ; Out: AL= DOS error code; CY= set if
  25. ;      error.
  26.  
  27. PutByt  PROC    NEAR
  28.  
  29. ;--- write a byte to the buffer
  30.  
  31.         mov     dx, [bx + _BUFFER_BYTES]        ;load bytes in buffer
  32.         cmp     dx, [bx + _BUFFER_SIZE]         ;check if full
  33.         je      _bfput1
  34.  
  35.         inc     WORD [bx + _BUFFER_BYTES]       ;increment bytes in buffer
  36.         inc     WORD [bx + _BUFFER_CURRENT]     ;increment pointer
  37.         push    bx
  38.         push    ds
  39.         lds     bx, [bx + _BUFFER_CURRENT]      ;load buffer location
  40.         mov     [bx - 1], al                    ;store byte to buffer
  41.         pop     ds
  42.         pop     bx
  43.  
  44.         clc
  45.         ret
  46.  
  47. ;--- write out buffer first
  48.  
  49. _bfput1 push    ax
  50.         call    BufPut          ;write buffer
  51.         pop     ax
  52.         jnc     PutByt          ;loop back if no error
  53.         ret
  54.         ENDP
  55.  
  56. ;========================================
  57. ; Write all bytes in buffer.
  58. ;
  59. ; In: BX= buffer record address.
  60. ;
  61. ; Out: AL= DOS error code; CY= set if
  62. ;      error.
  63.  
  64. BufPut  PROC    NEAR
  65.         push    bx
  66.         mov     dx, [bx + _BUFFER_CURRENT + 2]  ;segment of buffer
  67.         mov     ax, [bx + _BUFFER_BASE]         ;buffer base
  68.         mov     cx, [bx + _BUFFER_BYTES]        ;bytes in buffer
  69.         mov     bx, [bx + _BUFFER_HANDLE]       ;file handle
  70.         call    FilWri                          ;write to file
  71.         pop     bx
  72.         jc      _bfwri1                         ;jump if error
  73.         mov     WORD [bx + _BUFFER_BYTES], 0    ;zero bytes in buffer
  74.         push    WORD [bx + _BUFFER_BASE]
  75.         pop     WORD [bx + _BUFFER_CURRENT], ax ;reset base pointer
  76.         clc
  77. _bfwri1 ret
  78.         ENDP
  79.  
  80. _buffer3_end
  81.